package com.ruoyi.common.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 自定义元对象处理器
 * 处理元数据对象（比如 createTime、updateTime）
 */
// 必须加 @Component，让Spring扫描到这个处理器
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    private static final String CREATE_TIME = "createTime";

    private static final String UPDATE_TIME = "updateTime";

    // 新增数据时，自动填充「标记为 INSERT 的字段」（比如 createTime）
    @Override
    public void insertFill(MetaObject metaObject) {
        // 给 "createTime" 字段赋值：当前时间
        this.strictInsertFill(
                metaObject,          // 元数据对象
                CREATE_TIME,        // 要填充的字段名（和实体类属性名一致）
                LocalDateTime.class, // 字段类型
                LocalDateTime.now()  // 填充的值（当前时间）
        );

        // 给 "updateTime" 字段赋值：当前时间
        this.strictInsertFill(
                metaObject,          // 元数据对象
                UPDATE_TIME,        // 要填充的字段名（和实体类属性名一致）
                LocalDateTime.class, // 字段类型
                LocalDateTime.now()  // 填充的值（当前时间）
        );
    }

    // 修改数据时，自动填充「标记为 INSERT_UPDATE 的字段」（比如 updateTime）
    @Override
    public void updateFill(MetaObject metaObject) {
        // 给 "updateTime" 字段赋值：当前时间
        this.strictUpdateFill(
                metaObject,
                UPDATE_TIME,
                LocalDateTime.class,
                LocalDateTime.now()
        );
    }
}
